package cn.iocoder.yudao.module.call.service.group;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.call.controller.admin.group.vo.GroupPageReqVO;
import cn.iocoder.yudao.module.call.controller.admin.group.vo.GroupSaveReqVO;
import cn.iocoder.yudao.module.call.dal.dataobject.group.GroupDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 班组 Service 接口
 *
 * @author 我
 */
public interface GroupService {

    /**
     * 创建班组
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createGroup(@Valid GroupSaveReqVO createReqVO);

    /**
     * 更新班组
     *
     * @param updateReqVO 更新信息
     */
    void updateGroup(@Valid GroupSaveReqVO updateReqVO);

    /**
     * 删除班组
     *
     * @param id 编号
     */
    void deleteGroup(Long id);

    /**
     * 获得班组
     *
     * @param id 编号
     * @return 班组
     */
    GroupDO getGroup(Long id);

    List<GroupDO> getGroupList();

    List<GroupDO> getGroupList(Collection<Long> ids);

    /**
     * 获得班组分页
     *
     * @param pageReqVO 分页查询
     * @return 班组分页
     */
    PageResult<GroupDO> getGroupPage(GroupPageReqVO pageReqVO);

    default Map<Long, GroupDO> getGroupMap(Collection<Long> ids) {
        List<GroupDO> data = getGroupList(ids);
        return CollectionUtils.convertMap(data, GroupDO::getId);
    }

    default Map<Long, GroupDO> getGroupMap() {
        List<GroupDO> data = getGroupList();
        return CollectionUtils.convertMap(data, GroupDO::getId);
    }

}